<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
</head>

<body>
    <!-- 
       promise 可以解决回调地狱问题

       promise 是个构造函数 用来创建对象的

 -->
    <script>
        // 创建一个promise对象
        // Promise这个函数的参数也是一个函数（回调函数）这个函数内的代码
        // 回调函数也有两个参数 也是函数
        var p = new Promise(function (resolve, reject) {
            // 这个函数内的代码会被同步执行
            console.log('一行代码');
            // 用来封装异步代码
            // ajax异步的js与xml异步的请求
            $.ajax({
                type: 'get',
                url: 'https://cnodejs.org/api/v1/topics',
                data: {
                    page: 1
                },
                success(data) {
                    //console.log(data);
                    //在成功后调用的函数
                    resolve(data);
                },
                error(err) {
                    // console.log(err);
                    // 在失败后调用的函数
                    reject('错误2222')
                }
            })
        });
        // Promise 代码  从发生状态更改
        // 由pending等待中更改为fulfilled成功 或reject失败

        /*  console.log('-----');
         console.log(p);
         setTimeout(function(){
             console.log(p);
         },6000)
      */

        // .then() 用来接收Promise内部代码执行完成后的结果
        // .then的参数1 会在resolve()函数调用后执行 会接收resolve()传递的数据
        p.then(function (res) {
            console.log(res);
        }, function (err) {
            console.log(err);
        })

        // .catch() 用来接收Promise内部代码执行完成后的结果
        // 参数1 会在reject()函数调用后执行 会接收reject()传递的数据
        p.then(function (res) {
            console.log(res);
        }).catch(function (err) {
            console.log(err);
        })
        p.then(function (res) {
            console.log(res);
        })
        p.then(function (res) {
            console.log(res);
        })


        
       /*  function Aa(fun) {
            console.log('----');
            for (var i = 0; i < 1000; i++) {
                console.log('???????');
            }
            fun();
        }

        var a = new Aa(function () {
            console.log('+++');
            for (var i = 0; i < 1000; i++) {
                console.log('+++++???????');
            }
        });

        console.log('====') */
    </script>
</body>

</html>